package cn.xeblog.plugin.game.sudoku.enums;

import com.intellij.openapi.ui.ComboBox;
import java.awt.Dimension;
import java.util.Arrays;
import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 困难等级
 *
 * @author ☆程序员鼓励师☆
 * @date 2022/8/12 11:35
 */
@Getter
@AllArgsConstructor
public enum Level {
  /**
   * 简单
   */
  EASY(1, 30, "简单"),
  /**
   * 普通
   */
  NORMAL(2, 40, "普通"),
  /**
   * 困难
   */
  HARD(3, 50, "困难"),
  /**
   * 非常困难
   */
  VERY_HARD(4, 60, "非常困难");

  /**
   * 下标
   */
  final int index;
  /**
   * 空白数
   */
  final int blank;
  /**
   * 备注
   */
  final String memo;

  /**
   * 通过备注获取级别枚举
   *
   * @param name 备注名称
   * @return 级别枚举
   */
  public static Level getLevel(String name) {
    return Arrays.stream(values()).filter(level -> level.memo.equals(name)).findFirst().orElse(Level.EASY);
  }

  /**
   * 获取级别下拉列表项
   *
   * @param dimension 尺寸
   * @return 级别下拉列表项
   */
  public ComboBox<String> getComboBox(Dimension dimension) {
    ComboBox<String> comboBox = new ComboBox<>();
    // 设置此组件的首选大小
    comboBox.setPreferredSize(dimension);
    // 级别下拉列表项添加选项值
    Arrays.stream(Level.values()).map(Level::getMemo).forEach(comboBox::addItem);
    comboBox.setSelectedItem(this.getMemo());
    return comboBox;
  }
}
